package exp.day04;

import java.util.Iterator;
import java.util.LinkedList;

/*设有n个人围坐一圈并按顺时针方向从1到n编号，从第1个人开始进行1到m的报数，报数到第个m人，此人出圈，
 * 再从他的下一个人重新开始1到m的报数，如此进行下去直到所剩下一人为止。
 * 输入: 10 3
 * 输入多行，每行2个数，分别表示n和m.
 * 输出: 4
 * 计算每一行中最后剩下这个人的编号．
 */
public class Exp04Joseph {
    public static void main(String[] args) {
        int n = 10, m = 3;
        LinkedList<Integer> L = new LinkedList<>();
        for (int i = 1; i <= n; i++) L.add(i);
        /* Iterator是Java迭代器最简单的实现，
         * 为List设计的ListIterator具有更多的功能，
         * 它可以从两个方向遍历List，也可以从List中插入和删除元素。
         * 有三个方法：hasNext()、next()、remove()
         * hasNext:没有指针下移操作，只是判断是否存在下一个元素
         * next：指针下移，返回该指针所指向的元素
         * remove：删除当前指针所指向的元素，一般和next方法一起用，这时候的作用就是删除next方法返回的元素
         */
        Iterator<Integer> iterator = L.iterator();
        while (L.size() > 1) {
            for (int cnt = 0; cnt < m; cnt++) {
                if (iterator.hasNext())
                    iterator.next();
                else {
                    iterator = L.iterator();
                    iterator.next();
                }
            }
            iterator.remove();
//            System.out.println(L);
        }
        System.out.println("The last one is: " + L.getFirst());
    }
}
